package com.demo.forum.model.exception;

import com.demo.forum.common.Result;
import com.demo.forum.common.ResultCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 全局异常处理
 *
 */
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
//    /**
//     * 1. 处理自定义异常
//     */
//
//
//    @ExceptionHandler(ApplicationException.class)
//    public Result ApplicationException(ApplicationException e){
//        e.printStackTrace();//打印栈信息
//        //打印错误信息
//        log.error(e.getMessage());
//        //如果拋出的是Result ,直接將Result 返回即可
//        if (e.getErrorResult() != null) {
//                    return e.getErrorResult();
//                }
//        //如果拋出的是Message ,那麼對Messge 進行校驗
//                // 非空校验
//                if (e.getMessage() == null || e.getMessage().equals("")) {
//                    return Result.failed(ResultCode.ERROR_SERVICES);
//                }
//
//                // 返回具体的异常信息
//                return Result.failed(e.getMessage());
//    }
//
//
//    @ExceptionHandler(Exception.class)
//    public Result exceptionHandler (Exception e) {
//        // 打印异常信息
//        e.printStackTrace();
//        // 打印日志
//        log.error(e.getMessage());
//        // 非空校验
//        if (e.getMessage() == null || e.getMessage().equals("")) {
//            return Result.failed(ResultCode.ERROR_SERVICES);
//        }
//        // 返回异常信息
//        return Result.failed(e.getMessage());
//    }

    @ExceptionHandler
    public Result application(ApplicationException e){
        e.printStackTrace();
        log.error(e.getMessage());
        if(e.errorResult!=null){
            return e.errorResult;
        }
        if(e.getMessage() == null || e.getMessage().equals("")){
            return Result.failed(ResultCode.ERROR_SERVICES);
        }
        return Result.failed(e.getMessage());
    }

    @ExceptionHandler
    public Result exception(Exception e){
        e.printStackTrace();
        log.error(e.getMessage());
        if(e.getMessage() == null || e.getMessage().equals("")){
            return Result.failed(ResultCode.ERROR_SERVICES);
        }
        return Result.failed(e.getMessage());
    }


}
